www.gusucode.com > Scissor Lift Model in Simscape Multibody工具箱matlab源码程序 > Scissor Lift Model in Simscape Multibody/Scissor_Lift_R17a/Scripts_Data/sm_scissor_lift_param.m
function SCL_Par = sm_scissor_lift_param(varargin) %sm_scissor_lift_param Generate parameter values for scissor lift models % SCL_Par = sm_scissor_lift_param(<link length>, <link width>, <separation>, <initial lift>) % This function returns the parameter values for model Scissor_Lift. % The entire mechanical system is parameterized based on three dimensions % You can overwrite default values by specifying: % link length SCL_Par.Link.Length (cm) Default 240 % link width SCL_Par.Link.Width (cm) Default 15 % crossbar separation SCL_Par.Link_Sep.Outer_Outer (cm) Default 80 % initial lift SCL_Par.Init.Platform_Height (cm) Default 50 % initial lift = platform-link attachment point height above % cart-link attachment point % Leave the input argument empty to use the default value % % For example to override the link length and platform initial lift: % >> SCL_Par = sm_scissor_lift_param(250,[],[],55); % % Copyright 2017 The MathWorks, Inc. % Default values default_values = {... 'SCL_Par.Link.Length', 240; 'SCL_Par.Link.Width', 15; 'SCL_Par.Link_Sep.Outer_Outer', 80; %cm 'SCL_Par.Init.Platform_Height',50}; % cm % Overwrite default if value specified for i=1:length(default_values) eval([default_values{i,1} ' = ' num2str(default_values{i,2}) ';']); if(nargin>=i && ~isempty(varargin{i})) eval([default_values{i,1} ' = ' num2str(varargin{i}) ';']); end end % Colors SCL_Par.Colors.Yellow = [0.8 0.8 0.0]; SCL_Par.Colors.Red = [0.8 0.2 0.0]; SCL_Par.Colors.Blue = [0.0 0.6 0.8]; SCL_Par.Colors.Dark_Gray = [0.5 0.5 0.5]; SCL_Par.Colors.Gray = [0.9 0.9 0.9]; SCL_Par.Colors.GrayBlue = [164 184 200]/255; % Link dimensions SCL_Par.Link.Thick = 4; % cm SCL_Par.Link.HolRad = 5; % cm SCL_Par.Link.Density = 10; SCL_Par.Link.Color = SCL_Par.Colors.Yellow; SCL_Par.Link.ColorI = SCL_Par.Colors.Gray; SCL_Par.Link.ColorO = SCL_Par.Colors.GrayBlue; SCL_Par.Link.Opacity = 1; % Link separation along width of lift SCL_Par.Link_Sep.Outer_Inner = 10; %cm % Joint Targets % Constants SCL_Par.Init.Num_Stages = 3; % cm SCL_Par.Init.Base_Angle_H0 = asind(SCL_Par.Link.Width/SCL_Par.Link.Length); % deg % Calculated initial values SCL_Par.Init.Base_Angle=asind(SCL_Par.Init.Platform_Height/(SCL_Par.Init.Num_Stages*SCL_Par.Link.Length)); SCL_Par.Init.Roller_Position = ... cosd(SCL_Par.Init.Base_Angle)*SCL_Par.Link.Length*-1; % Alternate calculations for other inputs %SCL_Par.Init.Platform_Height = SCL_Par.Init.Num_Stages*SCL_Par.Link.Length*sind(SCL_Par.Init.Base_Angle); %SCL_Par.Roller.Init_Pos_Target = (SCL_Par.Link.Length-0.5); % cm %SCL_Par.Roller.Init_Pos_Target = (SCL_Par.Link.Length-0.5)*-1; % cm %SCL_Par.Crossbar.Init_Angle_Target = -(asin(SCL_Par.Roller.Init_Pos_Target/SCL_Par.Link.Length)*180/pi-90); %SCL_Par.Init.Base_Angle = asind(... % SCL_Par.Init.Platform_Lift/(SCL_Par.Init.Num_Stages*SCL_Par.Link.Length)+sind(SCL_Par.Init.Base_Angle_H0)); % deg % Shaft connecting sides SCL_Par.Trans_Shaft.Radius = 5; % cm SCL_Par.Trans_Shaft.Density = 1000; SCL_Par.Trans_Shaft.Color = SCL_Par.Colors.GrayBlue; SCL_Par.Trans_Shaft.Opacity = 1; % Pin connecting links SCL_Par.Link_Pin.Radius = 5; % cm SCL_Par.Link_Pin.Density = 1000; SCL_Par.Link_Pin.Color = SCL_Par.Colors.GrayBlue; SCL_Par.Link_Pin.Opacity = 1; % Rollers at top and bottom SCL_Par.Roller.Roller_Radius = 8; SCL_Par.Roller.Roller_Length = 6; SCL_Par.Roller.Shaft_Radius = 5; SCL_Par.Roller.Shaft_Length = SCL_Par.Link.Thick*1.1; SCL_Par.Roller.Density = 1000; SCL_Par.Roller.Color = [0.0 0.6 0.8]; SCL_Par.Roller.Opacity = 1; % Hardstop at bottom SCL_Par.Roller.Hardstop.UB = 0; SCL_Par.Roller.Hardstop.LB = -cosd(SCL_Par.Init.Base_Angle_H0)*SCL_Par.Link.Length; SCL_Par.Roller.Hardstop.Stiffness = 1e8; SCL_Par.Roller.Hardstop.Damping = 1e7; % Attachments for links at top and bottom SCL_Par.Base_Block.Height = SCL_Par.Roller.Roller_Radius*2; SCL_Par.Base_Block.Width = SCL_Par.Base_Block.Height; SCL_Par.Base_Block.Length = SCL_Par.Roller.Roller_Length; SCL_Par.Base_Block.Shaft_Radius = SCL_Par.Roller.Shaft_Radius; SCL_Par.Base_Block.Shaft_Length = SCL_Par.Link.Thick*1.1; SCL_Par.Base_Block.Density = 1000; SCL_Par.Base_Block.Color = [0.0 0.6 0.8]; SCL_Par.Base_Block.Opacity = 1; % Actuator bracket SCL_Par.Act.Brkt.Shaft.Radius = SCL_Par.Trans_Shaft.Radius; SCL_Par.Act.Brkt.Shaft.Density = 1000; SCL_Par.Act.Brkt.Shaft.Color = SCL_Par.Colors.GrayBlue; SCL_Par.Act.Brkt.Shaft.Opacity = 1; SCL_Par.Act.Brkt.Flange.Width = 70; %cm SCL_Par.Act.Brkt.Flange.Thickness = SCL_Par.Link.Thick; %cm SCL_Par.Act.Brkt.Flange.Offset_H = 15; %cm SCL_Par.Act.Brkt.Flange.Offset_L = 35; %cm - to be tuned SCL_Par.Act.Brkt.Flange.Height = ... SCL_Par.Act.Brkt.Shaft.Radius + 1 +... SCL_Par.Act.Brkt.Flange.Offset_H-SCL_Par.Link.Width/2; %cm %SCL_Par.Act.Brkt.Flange.xsec = [... % -shaft_radius-1 shaft_radius/2+0.5+W/2;... % -fl_w/2 (-fl_h+W)/2;... % fl_w/2 (-fl_h+W)/2;... % shaft_radius+1 shaft_radius/2+0.5+W/2]*flupdown; SCL_Par.Act.Brkt.Flange.Density = 1000; %cm SCL_Par.Act.Brkt.Flange.Color = SCL_Par.Colors.Gray; SCL_Par.Act.Brkt.Flange.Opacity = 1; % Actuator SCL_Par.Act.Collar.Radius = SCL_Par.Trans_Shaft.Radius*1.1; %cm SCL_Par.Act.Collar.Length = 30; %cm SCL_Par.Act.Collar.Density = 1000; %cm SCL_Par.Act.Collar.Color = [0.5 0.5 0.5]; %cm SCL_Par.Act.Collar.Opacity = 1; %cm SCL_Par.Act.Cylinder.Radius = SCL_Par.Trans_Shaft.Radius*1.1; %cm SCL_Par.Act.Cylinder.Length = SCL_Par.Link.Length*0.675*0.8; %cm SCL_Par.Act.Piston_Seat.Radius = SCL_Par.Trans_Shaft.Radius*1.1; %cm SCL_Par.Act.Piston_Seat.Length = 20; %cm SCL_Par.Act.Piston_Length = SCL_Par.Link.Length*0.675; %cm SCL_Par.Act.Piston_Radius = SCL_Par.Act.Cylinder.Radius*0.9; %cm SCL_Par.Act.Spring.Stiffness = 5e4; %cm SCL_Par.Act.Spring.Damping = 9e3; %cm SCL_Par.Act.Spring.Equilibrium_Position = SCL_Par.Link.Length; %cm % Calculate initial extension % Required for motion actuation in Ideal Actuator SCL_Par.Act.InitExt = sqrt(... (SCL_Par.Act.Brkt.Flange.Offset_H*2+SCL_Par.Link.Length*sind(SCL_Par.Init.Base_Angle*2))^2 ... + (SCL_Par.Link.Length*cosd(SCL_Par.Init.Base_Angle*2)-SCL_Par.Act.Brkt.Flange.Offset_L*2)^2)/100; % Cart %SCL_Par.Cart.Axle.Radius = 4; No longer used SCL_Par.Cart.Axle.Wheel_Distance = SCL_Par.Link_Sep.Outer_Outer+10; SCL_Par.Cart.Axle.Tire.Radius = 19; SCL_Par.Cart.Axle.Rim.Radius = SCL_Par.Cart.Axle.Tire.Radius-5; SCL_Par.Cart.Axle.Tire.Thickness = 15; SCL_Par.Cart.Axle.Tire.Density = 100; SCL_Par.Cart.Axle.Tire.Color = SCL_Par.Colors.Gray; SCL_Par.Cart.Axle.Rim.Thickness = 10; SCL_Par.Cart.Axle.Rim.Density = 1000; SCL_Par.Cart.Axle.Rim.Color = [0.5 0.5 0.5]; SCL_Par.Cart.Axle.Tire.Stiffness = 1e5; SCL_Par.Cart.Axle.Tire.Damping = 1e6; SCL_Par.Cart.Axle.Tire.MuStatic = 0.8; SCL_Par.Cart.Axle.Tire.MuKinetic = 0.5; SCL_Par.Cart.Axle.Tire.MuVth = 0.005; SCL_Par.Cart.Platform.Height = 10; SCL_Par.Cart.Platform.Width = ... SCL_Par.Cart.Axle.Wheel_Distance+... SCL_Par.Cart.Axle.Tire.Thickness; SCL_Par.Cart.Platform.Length = SCL_Par.Link.Length+40; SCL_Par.Cart.Platform.Rim.Width = 2; SCL_Par.Cart.Platform.Rim.Depth = SCL_Par.Base_Block.Height; SCL_Par.Cart.Platform.Rim.Extrusion = Extr_Data_Box(... SCL_Par.Cart.Platform.Length,... SCL_Par.Cart.Platform.Length-SCL_Par.Cart.Platform.Rim.Width,... SCL_Par.Cart.Platform.Width,... SCL_Par.Cart.Platform.Width-SCL_Par.Cart.Platform.Rim.Width); SCL_Par.Cart.Axle.Wheelbase = SCL_Par.Cart.Platform.Length-2*SCL_Par.Cart.Axle.Tire.Radius; SCL_Par.Cart.Platform.Subhousing.FUD = 2; SCL_Par.Cart.Platform.Subhousing.RUD = 5; SCL_Par.Cart.Platform.Subhousing.FWHrad = 0.5*SCL_Par.Cart.Axle.Tire.Radius; SCL_Par.Cart.Platform.Subhousing.RWHrad = SCL_Par.Cart.Axle.Tire.Radius; SCL_Par.Cart.Platform.Subhousing.Extr = [... -SCL_Par.Cart.Platform.Length/2 SCL_Par.Cart.Platform.Subhousing.FUD;... -SCL_Par.Cart.Platform.Length/2 0;... -SCL_Par.Cart.Platform.Length/2+2*SCL_Par.Cart.Axle.Tire.Radius 0;... [-SCL_Par.Cart.Platform.Length/2+2*SCL_Par.Cart.Axle.Tire.Radius+sind(1:1:90)*SCL_Par.Cart.Platform.Subhousing.FWHrad; ... cosd(1:1:90)*SCL_Par.Cart.Platform.Subhousing.FWHrad-SCL_Par.Cart.Platform.Subhousing.FWHrad]';... -SCL_Par.Cart.Platform.Length/2+2*SCL_Par.Cart.Axle.Tire.Radius+SCL_Par.Cart.Platform.Subhousing.FWHrad ... -SCL_Par.Cart.Platform.Subhousing.FWHrad-SCL_Par.Cart.Axle.Tire.Radius*1.6;... SCL_Par.Cart.Platform.Length/2-SCL_Par.Cart.Axle.Tire.Radius*2.2... -SCL_Par.Cart.Platform.Subhousing.FWHrad-SCL_Par.Cart.Axle.Tire.Radius*1.6; SCL_Par.Cart.Platform.Length/2-SCL_Par.Cart.Axle.Tire.Radius*2.2... -SCL_Par.Cart.Platform.Subhousing.FWHrad-SCL_Par.Cart.Axle.Tire.Radius*0.8; [SCL_Par.Cart.Platform.Length/2+sind(-89:1:0)*SCL_Par.Cart.Axle.Tire.Radius*1.2-SCL_Par.Cart.Axle.Tire.Radius; ... cosd(-89:1:0)*SCL_Par.Cart.Axle.Tire.Radius*1.2-SCL_Par.Cart.Platform.Subhousing.FWHrad-SCL_Par.Cart.Axle.Tire.Radius*0.8]';... SCL_Par.Cart.Platform.Length/2 -SCL_Par.Cart.Axle.Tire.Radius*(0.1);... SCL_Par.Cart.Platform.Length/2 SCL_Par.Cart.Platform.Subhousing.FUD... ]; SCL_Par.Cart.Platform.Subhousing.Color = SCL_Par.Colors.Blue; % Code for plotting subhousing cross section % figure(1); % plot(SCL_Par.Cart.Platform.Subhousing.Extr(:,1),SCL_Par.Cart.Platform.Subhousing.Extr(:,2)); % axis equal % Environment SCL_Par.Floor.Width = 10; SCL_Par.Floor.Length = 10; SCL_Par.Floor.Height = 0.05; % Platform cage SCL_Par.Cage.PipeWidth = 5; %cm SCL_Par.Cage.Height = 150; %cm SCL_Par.Cage.RailRad = 20; %cm % Platform extension SCL_Par.Platform.Ext.Width = SCL_Par.Cart.Platform.Width-SCL_Par.Cage.PipeWidth*3; %cm SCL_Par.Platform.Ext.Height = SCL_Par.Cart.Platform.Height*0.5; %cm SCL_Par.Platform.Ext.Length = SCL_Par.Cart.Platform.Length-SCL_Par.Cage.PipeWidth*3; %cm % Platform extension cage SCL_Par.Platform.Ext.Cage.Height = SCL_Par.Cage.Height-SCL_Par.Platform.Ext.Height; SCL_Par.Platform.Ext.Cage.TrapRail.Curve1.H = SCL_Par.Platform.Ext.Cage.Height*0.4; SCL_Par.Platform.Ext.Cage.TrapRail.Curve1.Rad = 20; SCL_Par.Platform.Ext.Cage.TrapRail.Curve1.Ang = 30; SCL_Par.Platform.Ext.Cage.TrapRail.Width = 90; SCL_Par.Platform.Ext.Cage.TrapRail.Curve2.Rad = 20; SCL_Par.Platform.Ext.Cage.TrapRail.Curve2.H = SCL_Par.Platform.Ext.Cage.Height-SCL_Par.Platform.Ext.Cage.TrapRail.Curve2.Rad; SCL_Par.Platform.Ext.Cage.TrapRail.Curve2.Ang = 90-SCL_Par.Platform.Ext.Cage.TrapRail.Curve1.Ang; % Joystick SCL_Par.Joystick.Box = [40 20 20]; SCL_Par.Joystick.Stick.Rad = 3; SCL_Par.Joystick.Stick.Len = 25; SCL_Par.Joystick.Panel = [45 0.5 45]; % Behavior Specification SCL_Par.Spec.Lift_Speed = 0.225; % m/s